]> git.r.bdr.sh - rbdr/super-polarity/blobdiff - Super Polarity/ActorManager.cs
I have the worst commits ever.
[rbdr/super-polarity] / Super Polarity / ActorManager.cs
index 1b4ef96c6e1c506a690a0b6c9899e782879d0287..8cd265a432a06d10867bd6fdd3e86836a638eb94 100644 (file)
@@ -10,9 +10,9 @@ namespace SuperPolarity
     static class ActorManager
     {
 
-        static Game Game;
+        static SuperPolarity Game;
         static int OutlierBounds;
-        static List<Actor> Actors;
+        static IList<Actor> Actors;
 
         static ActorManager()
         {
@@ -50,12 +50,16 @@ namespace SuperPolarity
 
         static void CheckActors()
         {
-            var i = 0;
-            foreach (Actor actor in Actors)
+            for (var i = Actors.Count - 1; i >= 0; i--)
             {
-                i++;
-                foreach (Actor other in Actors.Skip(i))
+                if (i >= Actors.Count) {
+                    i = Actors.Count - 1;
+                }
+                Actor actor = Actors[i];
+                for (var j = i - 1; j >= 0; j--)
                 {
+                    Actor other = Actors[j];
+
                     CheckCollision(actor, other);
 
                     if (actor.GetType().IsSubclassOf(typeof(Ship)) && other.GetType().IsSubclassOf(typeof(Ship)))
@@ -68,6 +72,13 @@ namespace SuperPolarity
 
         static void CheckCollision(Actor actor, Actor other)
         {
+            var collision = Rectangle.Intersect(actor.Box, other.Box);
+            var inverseCollision = Rectangle.Intersect(other.Box, actor.Box);
+            if (!collision.IsEmpty && !actor.Dying && !other.Dying)
+            {
+                actor.Collide(other, collision);
+                other.Collide(actor, inverseCollision);
+            }
 
         }
 
@@ -103,7 +114,7 @@ namespace SuperPolarity
             }
         }
 
-        internal static void SetGame(Game game)
+        internal static void SetGame(SuperPolarity game)
         {
             Game = game;
         }